The security of computing resources and associated data is of high importance in many contexts. As an example, organizations often utilize networks of computing devices to provide a robust set of services to their users. Networks often span multiple geographic boundaries and often connect with other networks. An organization, for example, may support its operations using both internal networks of computing resources and computing resources managed by others. Computers of the organization, for instance, may communicate with computers of other organizations to access and/or provide data while using services of another organization. In many instances, organizations configure and operate remote networks using hardware managed by other organizations, thereby reducing infrastructure costs and achieving other advantages. With such configurations of computing resources, ensuring that access to the resources and the data they hold is secure can be challenging, especially as the size and complexity of such configurations grow.
Many cryptographic algorithms require a unique initialization vector (referred to as a starting variable or nonce, in some contexts) with every call to the cryptographic primitive under the same key. Use of the same initialization vector and key combination on different plaintexts (input to the cryptographic algorithm) may reveal information about the plaintext that can aid in a cryptographic attack. Such effects are often exacerbated when an attacker has access to one of the plaintexts. Preventing the same initialization vector/key pair from being used on multiple plaintexts, however, presents numerous challenges including, but not limited to, a substantial amount of computing resources (processing capacity, memory, etc.) being utilized for this purpose. Such challenges become even more difficult in distributed systems where multiple devices in the system may utilize the same cryptographic key.